
# -*- coding: utf-8 -*-
#

ak = "9zEW0fGeNpW1kdolG0obOkp2"
# 文字识别应用的API Key
sk = "mjZjeGxGqrfeHrnPyGU9wgZqtLKTK6Qt"
# 文字识别应用的Secret Key

aes = 'bd3f04e2e63103a4'
# aes key 从控制台 文字识别-应用列表-应用管理 获取

# 百度OCR工具类

# 必要的库导入
import requests
import base64
import json
from urllib.parse import urlencode

class BaiduOCRTool:
    def __init__(self, ak, sk, aes_key=None):
        self.ak = ak
        self.sk = sk
        self.aes_key = aes_key  # 注意：如果API不需要AES加密，则此参数可以不用
        self.access_token = self._get_access_token()

    def _get_access_token(self):
        url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={self.ak}&client_secret={self.sk}"
        response = requests.get(url)
        return response.json()['access_token']

    def _encrypt_image_data(self, image_data):
        # 注意：此函数仅当API需要加密图片数据时才需要
        # 这里假设已经有一个正确的AES加密实现
        # 由于示例中未提供具体的加密要求，因此此函数留空或根据实际需求实现
        pass

    def _get_image_data_from_url(self, image_url):
        response = requests.get(image_url)
        return response.content

    def send_ocr_request(self, image_url, id_card_side='front'):
        # 从URL获取图片数据
        image_data = self._get_image_data_from_url(image_url)

        # 如果需要加密，则调用加密函数（此处假设不需要）
        # encrypted_image_data = self._encrypt_image_data(image_data)

        # 将图片数据转换为Base64编码
        image_base64 = base64.b64encode(image_data).decode('utf-8')

        # 构造请求数据
        data = {
            'image': image_base64,
            'id_card_side': id_card_side  # 或 'back'，根据需要选择
        }

        # 发送POST请求到百度OCR API
        url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token={self.access_token}"
        headers = {'content-type': 'application/x-www-form-urlencoded'}
        response = requests.post(url, data=urlencode(data).encode('utf-8'), headers=headers)

        # 解析并返回响应数据
        return json.loads(response.content)



# 使用示例
if __name__ == "__main__":
    ak = ak
    sk = sk
    # aes_key = "你的AES密钥"（如果API需要加密，则提供；否则可以省略）

    baidu_ocr = BaiduOCRTool(ak, sk)  # 如果需要AES加密，则传入aes_key参数
    image_url = "https://img2.baidu.com/it/u=1370895799,2007596265&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=298"
    ocr_result = baidu_ocr.send_ocr_request(image_url)
    print(ocr_result)